`
https://leetcode.cn/problems/reshape-the-matrix/
`

/**
 * @param {number[][]} mat
 * @param {number} r
 * @param {number} c
 * @return {number[][]}
 */
var matrixReshape = function (mat, r, c) {
  const m = mat.length, n = mat[0].length
  if (m * n !== r * c) return mat

  // 无论几维数组都能转换为一维数组
  // 先转换为一维数组，再转换回去对应的数组即可
  const res = new Array(r).fill(null).map(() => new Array(c))
  for (let i = 0; i < m * n; i++) {
    set(res, i, get(mat, i))
  }
  return res
};

// 通过一维数组索引访问二维数组
function get(matrix, index) {
  const n = matrix[0].length
  const i = Math.floor(index / n), j = index % n
  return matrix[i][j]
}

// 通过一维数组索引设置二维数组
function set(matrix, index, value) {
  const n = matrix[0].length
  const i = Math.floor(index / n), j = index % n
  matrix[i][j] = value
}